//============================================================================================
/**
 * @file	syswork.h
 * @brief	プログラム、スクリプトからアクセスされるシステムワーク操作
 * @author	Satoshi Nohara
 * @date	05.11.01
 */
//============================================================================================
#ifndef	__SYSWORK_H__
#define	__SYSWORK_H__


#include "field/eventflag.h"


//============================================================================================
//	ワーク定義
//
//	SysWork_...Set
//	SysWork_...Get
//	関数を作り、そこからアクセスするようにする
//
//============================================================================================
#include "syswork_def.h"


//============================================================================================
//
//	連れ歩きトレーナーID格納ワーク関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 連れ歩きトレーナーID格納ワークセット
 *
 * @param	ev			EVENTWORKへのポインタ
 * @param	no			トレーナーID
 *
 * @return	"TRUE=セット出来た、FALSE=セット出来なかった"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_PairTrainerIDSet( EVENTWORK* ev, u16 no );

//--------------------------------------------------------------------------------------------
/**
 * 連れ歩きトレーナーID格納ワークゲット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"トレーナーID"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_PairTrainerIDGet( EVENTWORK* ev );


//============================================================================================
//
//	最初のポケモンナンバー関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 最初のポケモンナンバーセット
 *
 * @param	ev			EVENTWORKへのポインタ
 * @param	no			ポケモンナンバー
 *
 * @return	"TRUE=セット出来た、FALSE=セット出来なかった"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_FirstPokeNoSet( EVENTWORK* ev, u16 no );

//--------------------------------------------------------------------------------------------
/**
 * 最初のポケモンナンバーゲット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"最初のポケモンナンバー"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_FirstPokeNoGet( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 * ライバルのポケモンナンバーゲット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"ライバルのポケモンナンバー"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_RivalPokeNoGet( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 * サポートのポケモンナンバーゲット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"サポートのポケモンナンバー"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_SupportPokeNoGet( EVENTWORK* ev );


//--------------------------------------------------------------------------------------------
/**
 * 現在の記録を取得
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"個体値"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_OokisaRecordGet( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 * 記録を書き換える
 *
 * @param	ev			EVENTWORKへのポインタ
 * @param	no			個体値
 *
 * @return	"TRUE=セット出来た、FALSE=セット出来なかった"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_OokisaRecordSet( EVENTWORK* ev, u16 no );

//--------------------------------------------------------------------------------------------
/**
 * アンノーンノート　メモオープンレベルをセット
 *
 * @param	ev		EVENTWORKへのポインタ
 * @param	no		セットカウント
 *
 * @return	"TRUE=セット出来た、FALSE=セット出来なかった"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_AnnoonNoteMemoOpenLevelSet( EVENTWORK* ev, u16 level );

//--------------------------------------------------------------------------------------------
/**
 * アンノーンノート　メモオープンレベルを取得
 *
 * @param	ev		EVENTWORKへのポインタ
 * @param	no		セットカウント
 *
 * @return	"現在のレベル"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_AnnoonNoteMemoOpenLevelGet( EVENTWORK* ev );

//============================================================================================
//
//			配布イベント関連
//
//============================================================================================


//------------------------------------------------------------------
/**
 * @brief	配布イベント：許可状態のセット
 * @param	ev			EVENTWORKへのポインタ
 * @param	haihu_id	配布イベントのID
 */
//------------------------------------------------------------------
extern void SysWork_HaihuEventWorkSet(EVENTWORK * ev, int haihu_id);

//------------------------------------------------------------------
/**
 * @brief	配布イベント：許可状態のクリア
 * @param	ev			EVENTWORKへのポインタ
 * @param	haihu_id	配布イベントのID
 */
//------------------------------------------------------------------
extern void SysWork_HaihuEventWorkClear(EVENTWORK * ev, int haihu_id);

//------------------------------------------------------------------
/**
 * @brief	配布イベント：許可状態の取得
 * @param	ev			EVENTWORKへのポインタ
 * @param	haihu_id	配布イベントのID
 * @return	BOOL		配布イベント許可のとき、TRUE
 */
//------------------------------------------------------------------
extern BOOL SysWork_HaihuEventWorkCheck(EVENTWORK * ev, int haihu_id);

//--------------------------------------------------------------
/**
 * 移動ポケモン　ワークセット
 *
 * @param	ev	EVENTWORK *
 * @param	move_id	移動ポケモンID field/move_pokemon_def.h
 * @param	num		ワークにセットする値
 *
 * @retval	non
 *
 * num = 2 倒した
 * num = 1 捕獲した
 */
//--------------------------------------------------------------
extern void SysWork_MovePokeWorkSet( EVENTWORK* ev, u8 move_id, u16 num );

//============================================================================================
//
//			隠しマップ関連
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * @brief	隠しマップ：出現状態にする
 *
 * @param	ev			EVENTWORKへのポインタ
 * @param	hidemap_id	隠しマップのID（HIDEMAP_ID_〜、直値では０から３）
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_HideMapWorkSet(EVENTWORK * ev, int hidemap_id);

//--------------------------------------------------------------------------------------------
/**
 * @brief	隠しマップ：隠蔽状態にする
 *
 * @param	ev			EVENTWORKへのポインタ
 * @param	hidemap_id	隠しマップのID（HIDEMAP_ID_〜、直値では０から３）
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_HideMapWorkClear(EVENTWORK * ev, int hidemap_id);

//--------------------------------------------------------------------------------------------
/**
 * @brief	隠しマップ：出現状態をチェック
 *
 * @param	ev			EVENTWORKへのポインタ
 * @param	hidemap_id	隠しマップのID（HIDEMAP_ID_〜、直値では０から３）
 *
 * @retval	TRUE		出現している
 * @retval	FALSE		隠れている
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_HideMapWorkCheck(EVENTWORK * ev, int hidemap_id);


//--------------------------------------------------------------------------------------------
//			ポケモンクジ関連
//--------------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------------
/**
 * ポケモンクジ乱数に値をセット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_pokelot_value_set( EVENTWORK* ev ,u32 val);

//--------------------------------------------------------------------------------------------
/**
 * ポケモンクジ乱数の値をゲット
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
extern u32 SysWork_pokelot_value_get(EVENTWORK* ev);

//--------------------------------------------------------------------------------------------
/**
 * ポケモンクジ乱数の値を初期化
 *  ゲーム開始時の初期化処理
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
extern void SysWorkInitPokeLot(EVENTWORK* ev);

//--------------------------------------------------------------------------------------------
/**
 * ポケモンクジ乱数の値を初期化
 * 日数経過による更新処理
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
extern void SysWorkUpdatePokeLot(SAVEDATA *sv,u16 days);

//--------------------------------------------------------------------------------------------
/**
 * レンチャン数をゲット
 *
 * @param	ev		EVENTWORKへのポインタ
 * @param	no		セットカウント
 *
 * @return	カウント
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_RensyouCountGet( EVENTWORK* ev);

//--------------------------------------------------------------------------------------------
/**
 * レンチャン数をセット
 *
 * @param	ev		EVENTWORKへのポインタ
 * @param	no		セットカウント
 *
 * @return	"TRUE=セット出来た、FALSE=セット出来なかった"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_RensyouCountSet( EVENTWORK* ev, u16 no );

//--------------------------------------------------------------------------------------------
/**
 * １日１回、ポケモンのレベルと同じ数のとき、アイテムをくれるおじさん
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"カウント"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_PokeLevelNoGet( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 * １日１回、ポケモンのレベルと同じ数のとき、アイテムをくれるおじさん
 *
 * @param	ev		EVENTWORKへのポインタ
 * @param	no		セットカウント
 *
 * @return	"TRUE=セット出来た、FALSE=セット出来なかった"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_PokeLevelNoSet( EVENTWORK* ev ,u16 no);

//--------------------------------------------------------------------------------------------
/**
 * １日１回、ポケモンのレベルと同じ数のとき、アイテムをくれるおじさん
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
extern void SysWorkUpdatePokeLevelNo(SAVEDATA *sv);

//--------------------------------------------------------------------------------------------
/**
 *	デパート購入回数
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"最初のポケモンナンバー"
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_RegularCountPlus( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 *	デパート購入回数
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"カウント"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_RegularCountGet( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
extern u16 SysWork_FriendlyStepCountGet(EVENTWORK * ev);
extern void SysWork_FriendlyStepCountSet(EVENTWORK * ev, u16 step);

//--------------------------------------------------------------------------------------------
/**
 * 記念プリントワークの状態を取得
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_MemoryPrintTower( EVENTWORK *ev );
extern u16 SysWork_MemoryPrintFactory( EVENTWORK *ev );
extern u16 SysWork_MemoryPrintStage( EVENTWORK *ev );
extern u16 SysWork_MemoryPrintCastle( EVENTWORK *ev );
extern u16 SysWork_MemoryPrintRoulette( EVENTWORK *ev );


//--------------------------------------------------------------
/**
 * アルセウス　イベント進行状況を取得
 *
 * @param	ev	EVENTWORK *
 *
 * @retval	"イベントナンバー"
 */
//--------------------------------------------------------------
u16 SysWork_AruseusuEventGet( EVENTWORK *ev );

//--------------------------------------------------------------
/**
 * アルセウス　イベント進行状況をセット
 * @param	ev	EVENTWORK *
 * @param	no	"イベントナンバー"
 * @retval	non
 */
//--------------------------------------------------------------
void SysWork_AruseusuEventSet( EVENTWORK *ev, u16 no );
//--------------------------------------------------------------------------------------------
/**
 * WIFIフロンティアのTEMPクリアフラグ取得
 *
 * @param	ev		EVENTWORKのポインタ
 *
 * @return	"0=クリアしていない、1=クリアしている"
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_WifiFrClearFlagGet( EVENTWORK* ev );

/**
 * ロケット団占拠イベント発生中かどうかを判断する
 *
 *	@param	ev		EVENTWORKのポインタ
 *	@retval	TRUE 占拠イベント中
 *	@retval	FALSE 占拠イベント中ではない
 */
//--------------------------------------------------------------------------------------------
extern BOOL SysWork_CheckDuaringTheRadioTowerEvent( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 * サファリミッション進行状態をチェックする
 *
 * @reteurn	SAFARI_MISSION_XXXX syswork_def.h
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_GetSafariMissionStatus( EVENTWORK* ev );
//--------------------------------------------------------------------------------------------
/**
 * サファリミッション進行状態を設定する
 *
 * @reteurn	SAFARI_MISSION_XXXX syswork_def.h
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_SetSafariMissionStatus( EVENTWORK* ev, u16 mission_st);

//--------------------------------------------------------------------------------------------
/**
 * 虫取り大会賞品をストックする
 *
 * @reteurn	SAFARI_MISSION_XXXX syswork_def.h
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_MushitoriPrizeStock( EVENTWORK* ev ,u16 itemno);

//--------------------------------------------------------------------------------------------
/**
 * アオイの合言葉抽選
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_AoiAikotobaSet( EVENTWORK* ev );

//--------------------------------------------------------------------------------------------
/**
 * アオイの合言葉　取得
 */
//--------------------------------------------------------------------------------------------
extern u16 SysWork_AoiAikotobaGet( EVENTWORK* ev );


#ifdef PM_DEBUG
//--------------------------------------------------------------------------------------------
/**
 * ジャージ入手
 */
//--------------------------------------------------------------------------------------------
extern void SysWork_CommPkthOpenSet( EVENTWORK* ev );
#endif


#endif	//__SYSWORK_H__